#include "gestionThread.h"
#include "gestionClient.h"

void *threadAttenteSocket(gThread * gThread)
{
  int sock;
  int res;
  while(STOP == 0)
    {
      sock =  DepilerFile(&(gThread->gFile));
      if(STOP)
	return NULL;
      if(sock != -1)
	{
	  res = gestionClient(sock, gThread);
	  if(res != 0){
	    if(InsererFile(sock, &(gThread->gFile)) == 1)
	      {
		fprintf(stdout, "\n[clt:%d]! Erreur GThread : InsererFile.\n", sock);
	      }
	  }else{
	    Fichier fichier;
	    fichier.nomFichier = "";
	    fichier.socket = sock;
	    if(ChercherFichier(&(gThread->gFichier), &fichier) == 3)
	    {
	      if(SupprimerFichier(&(gThread->gFichier), &fichier) == 1)
	      {
		fprintf(stdout, "[clt:%d]> SupprimerFichier : CleanFichier.\n", sock);
	      }else{
		fprintf(stdout, "[clt:%d]! Erreur SupprimerFichier : CleanFichier.\n", sock);
	      }
	    }
	    shutdown(sock, SHUT_RDWR);
	    close(sock);
	    pthread_cond_signal(&(gThread)->gFile.non_plein);
	  }
	}
    }
  return NULL;
}

void initialiseGThread(gThread * gThread, int maxSock, char * _pathFile)
{
  gThread->pathFile = (char*)malloc(sizeof(char)*strlen(_pathFile)+1);
  sprintf(gThread->pathFile, "%s", _pathFile);
  /* Initialisation de gFile */
  InitialiseGFile(&(gThread->gFile), maxSock);
  /* Initialisation de gFichier */
  InitialiseGFichier(&(gThread->gFichier));
}

void testamentGThread(gThread * gThread)
{
  free(gThread->pathFile);
  /* Liberation de la gFile */
  TestamentGFile(&(gThread->gFile));
  /* Liberation de la gFichier */
  TestamentGFichier(&(gThread->gFichier));
}
